import { sp } from "cc";
import { BaseFightLogic } from "../core/BaseFightLogic";
import NormalAttackAction from "../core/strategy/NormalAttackAction";

/*****************************
 *@file: SimpleSpineAttack
 *@author: 陈吕唐
 *@desc: 简单执行攻击逻辑并播放动画
 *@date: 2024-03-06	18:55
 *****************************/
export default class SimpleSpineAttack extends NormalAttackAction {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/
    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/
    /***************************************************************
     *PropertyUI 引用的控件
     ***************************************************************/
    protected spine: sp.Skeleton = undefined!;
    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    public constructor(value: BaseFightLogic, spine: sp.Skeleton) {
        super(value);
        this.spine = spine;
    }
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/
    public async action(): Promise<boolean> {
        /**
         * 进行行动逻辑
         */
        let result = await super.action();
        if (!result) { return false; }

        /*
         * 播放动画
         */
        await this.playNormalAnimation();

        return result;
    }

    /**
     * 播放攻击动画
     * @returns 
     */
    private playNormalAnimation(): Promise<void> {
        let promise: Promise<void> = new Promise<void>((resolve, reject) => {
            this.spine.setAnimation(0, "attack_01", false);
            this.spine.setCompleteListener(() => {
                resolve();
            });
            this.spine.setInterruptListener(() => {
                resolve();
            });
        });
        return promise;
    }
    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/
}